package com.cn.service.server.PartsManagement.Impl;

import com.cn.bean.pojo.PartsManagement.BusinessTypeTable;
import com.cn.bean.pojo.sys.Sys_Sequence_Info_T;
import com.cn.bean.pojo.yw.ExpenseItemInfoTable;
import com.cn.config.config.Result;
import com.cn.mapper.dao.db5.PartsManagement.ExpenseItemInfoDao;
import com.cn.service.server.PartsManagement.ExpenseItemInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ExpenseItemInfoServiceImpl implements ExpenseItemInfoService {
    @Autowired(required = false)
    private ExpenseItemInfoDao expenseItemInfoDao;

    @Override
    public List<ExpenseItemInfoTable> selectExpenseItemInfoAside() {
        return expenseItemInfoDao.selectExpenseItemInfoAside();
    }

    @Override
    public List<ExpenseItemInfoTable> selectExpenseItemInfo(ExpenseItemInfoTable expenseItemInfoTable) {
        return expenseItemInfoDao.selectExpenseItemInfo(expenseItemInfoTable);
    }

    @Override
    public Integer getExpenseItemInfoAutoid() {

        return expenseItemInfoDao.getExpenseItemInfoAutoid();
    }

    @Override
    public Result addExpenseItemInfo(String name,String description, int status, int level, int parentID, int isLeaf) {

        Integer ID= expenseItemInfoDao.getExpenseItemInfoAutoid();
        ID = ID != null ? ++ID : 1;
        String code = String.valueOf(ID);
        int i = expenseItemInfoDao.addExpenseItemInfo(ID, code, name, description, status, level, parentID, isLeaf);
        if (i == 0) {
            return Result.failure("500", "添加失败");
        }
        return Result.success("200", "添加成功");
    }

    @Override
    public Result delExpenseItemInfo(int id) {
        List<ExpenseItemInfoTable> businessTypeTables = expenseItemInfoDao.selectExpenseItemInfoAside();
        boolean hasChildren = hasChildren(businessTypeTables, id);
        if (hasChildren) {
            return Result.failure("500", "删除失败，当前节点存在子节点");
        }
        int i = expenseItemInfoDao.delExpenseStatus(id);
        if (i > 0) {
            return Result.success("200", "删除成功");
        }
        return Result.failure("500", "删除失败");
    }

    @Override
    public Result updateExpenseItemInfo(int id, String code, String name, String description, int status, int level, int parentID, int isLeaf) {
        List<ExpenseItemInfoTable> businessTypeTables = expenseItemInfoDao.selectExpenseItemInfoAside();

        for (ExpenseItemInfoTable businessType : businessTypeTables) {
            if (businessType.getId() != id && businessType.getName().equals(name)) {
                return Result.failure("500", "业务类型名称重复");
            }
        }
        int i = expenseItemInfoDao.updateExpenseItemInfo(id, code, name, description, status, level, parentID, isLeaf);

        if (i > 0) {
            return Result.success("200", "修改成功");
        }
        return Result.failure("500", "修改失败");
    }

    private boolean hasChildren(List<ExpenseItemInfoTable> nodes, int id) {
        for (ExpenseItemInfoTable node : nodes) {
            if (node.getParentId() == id) {
                return true;
            }
        }
        return false;
    }
    }



